/*
 * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package com.sun.corba.se.spi.orbutil.fsm;

import com.sun.corba.se.impl.orbutil.fsm.NameBase;

import java.util.Map;
import java.util.HashMap;
import java.util.Set;
import java.util.HashSet;

import com.sun.corba.se.impl.orbutil.fsm.GuardedAction;
import com.sun.corba.se.impl.orbutil.fsm.NameBase;

/**
 * Base class for all states in a StateEngine.  This must be used
 * as the base class for all states in transitions added to a StateEngine.
 */
public class StateImpl extends NameBase implements State {

  private Action defaultAction;
  private State defaultNextState;
  private Map inputToGuardedActions;

  public StateImpl(String name) {
    super(name);
    defaultAction = null;
    inputToGuardedActions = new HashMap();
  }

  public void preAction(FSM fsm) {
  }

  public void postAction(FSM fsm) {
  }

  // Methods for use only by StateEngineImpl.

  public State getDefaultNextState() {
    return defaultNextState;
  }

  public void setDefaultNextState(State defaultNextState) {
    this.defaultNextState = defaultNextState;
  }

  public Action getDefaultAction() {
    return defaultAction;
  }

  public void setDefaultAction(Action defaultAction) {
    this.defaultAction = defaultAction;
  }

  public void addGuardedAction(Input in, GuardedAction ga) {
    Set gas = (Set) inputToGuardedActions.get(in);
    if (gas == null) {
      gas = new HashSet();
      inputToGuardedActions.put(in, gas);
    }

    gas.add(ga);
  }

  public Set getGuardedActions(Input in) {
    return (Set) inputToGuardedActions.get(in);
  }
}
